package com.wn.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wn.model.PageBean;
import com.wn.model.R;
import com.wn.model.User;
import com.wn.service.IUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.stereotype.Controller;

import java.util.Date;
import java.util.List;
import java.util.Objects;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author yellow Docter
 * @since 2022-06-06
 */
@CrossOrigin   // 解决跨域问题
@RestController
@Slf4j
@RequestMapping("/user")
public class UserController {

    /**
     *  01 注入service
     *  02 在controller 中对应的方法中调用service
     *
     */
    @Autowired
    private IUserService userService;

    /**
     *  添加分页的操作
     *
     *  00  添加分页插件
     *
     *  01 拿到 数据
     *     currentPage/pageSize
     *
     *  02 把数据封装成
     *     ipage 对象
     *
     *  03 通过service调用方法
     *      userService.page(xxx)
     *
     *  04  把返回的分页数据封装成 R
     *      返回
     *
     * @return
     */

    @RequestMapping("list")
    public R getDate(Integer currentPage,Integer pageSize,String userName){

        IPage<User> page = new Page<>(currentPage,pageSize);

        // 添加查询判断
        QueryWrapper<User> qr = new QueryWrapper<>();
        if (StringUtils.hasText(userName)){
            //给条件查询件
            // 数据库的列名
            qr.eq("user_name",userName);
        }

        IPage<User> p = userService.page(page,qr);

        PageBean<User> pageBean = new PageBean<>();
        // 组装数据
        if (Objects.nonNull(p)){
            // 分页的数据
            List<User> users = p.getRecords();
            //总数
            Long total = p.getTotal();
            pageBean.setData(users);
            pageBean.setTotal(total.intValue());
        }

        R ok = R.OK();
        ok.setData(pageBean);
        return ok;
    }

    @PostMapping
    public R addStu(@RequestBody User user ){

        // 后端 需要给默认值
        user.setDeleted(0);
        user.setCreateTime(new Date());
        user.setRole(1);

        log.info("userController....",user);

        boolean save = userService.save(user);
        if (save){
            return R.OK();
        }
        return R.ERROR();
    }

    @GetMapping("/{id}")
    public R addStu(@PathVariable Integer id){
        // 通过id查询
        User user = userService.getById(id);
        return  R.OK(user);
    }

    @PutMapping
    public R updateStu(@RequestBody User user ){

        //修改操作
        boolean update = userService.updateById(user);

        if (update){
            return R.OK();
        }
        return R.ERROR();
    }

    /**
     *  删除的逻辑 删除
     *
     *  01 使用mybatis 进行逻辑删除
     *
     *  02 配置
     *
     *
     *
     * @param id
     * @return
     */
    @DeleteMapping("/{id}")
    public R updateStu(@PathVariable Integer id){
        // 通过id查询
        boolean b = userService.removeById(id);
        if (b){
            return R.OK();
        }
        return R.ERROR();
    }

    @PutMapping("/status")
    public R updateStuStatus(@RequestBody User user ){

        // 把id 和 status 直接封装到 user
        Integer status = user.getStatus();

        user.setStatus(status == 0 ? 1:0);

        //修改操作
        boolean update = userService.updateById(user);

        if (update){
            return R.OK();
        }
        return R.ERROR();
    }
}
